#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "debugger.h"

void demo_variable_types() {
    printf("=== DWARF变量类型信息演示 ===\n");
    
    // 创建调试器实例
    debugger_t *dbg = debugger_create();
    if (!dbg) {
        printf("错误：无法创建调试器实例\n");
        return;
    }
    
    // 编译测试程序（带调试信息）
    printf("编译测试程序...\n");
    system("gcc -g -o test_variable_types test_variable_types.c");
    
    // 启动测试程序进行调试
    char *argv[] = {"./test_variable_types", NULL};
    if (debugger_launch(dbg, "./test_variable_types", argv) != 0) {
        printf("错误：无法启动测试程序\n");
        debugger_destroy(dbg);
        return;
    }
    
    // 加载符号和调试信息
    printf("加载调试信息...\n");
    if (debugger_load_symbols(dbg, "./test_variable_types") != 0) {
        printf("警告：调试信息加载不完整\n");
    }
    
    // 演示变量类型信息功能
    printf("\n=== 变量类型信息演示 ===\n");
    
    // 测试全局变量类型信息
    const char *test_variables[] = {
        "global_int",
        "global_char", 
        "global_float",
        "global_double",
        "global_string",
        "static_var",
        "global_struct",
        NULL
    };
    
    for (int i = 0; test_variables[i] != NULL; i++) {
        printf("\n--- 变量: %s ---\n", test_variables[i]);
        
        // 显示变量类型信息
        debugger_print_variable_type(dbg, test_variables[i]);
        
        // 显示变量地址和值
        debugger_print_variable_address(dbg, test_variables[i]);
    }
    
    // 测试不存在的变量
    printf("\n--- 测试不存在的变量 ---\n");
    debugger_print_variable_type(dbg, "nonexistent_variable");
    
    // 继续执行程序
    printf("\n继续执行程序...\n");
    debugger_continue(dbg);
    debugger_wait_for_signal(dbg);
    
    // 清理
    debugger_detach(dbg);
    debugger_destroy(dbg);
    
    printf("=== 演示结束 ===\n");
}

int main() {
    demo_variable_types();
    return 0;
}